#pragma once
#include <string>
#include <vector>
#include "util.h"

namespace banknamespace
{
	class Renderer
	{
	public:
		Renderer();
		virtual ~Renderer(void);

		virtual void init( HWND& m_hWnd, HDC& m_hdcWindow ) = 0;

		virtual void clear() = 0;
		virtual void setProjection(float fov, float aspect, float znear, float zfar) = 0;
		virtual void loadMatrix(float* matrix) = 0;
		virtual void swapBuffer() = 0;

		virtual unsigned int loadTexture( const char* szFilePath ) = 0;
		virtual unsigned int loadMemoryTexture( unsigned char* pixels, int width, int height ) = 0;
		virtual void bindTexture( unsigned int textureState, unsigned int textureId ) = 0;
		virtual void disableTexture( unsigned int textureState ) = 0;

		virtual int createProgram(const char* programName, std::vector<attrStruct>& attrString, std::vector<const char*>& uniformString) = 0;
		virtual void useProgram(int progID) = 0;
		virtual int getLocation(const char* name) = 0;
		virtual void setVariable(int ulocation, shaderType type, void* value) = 0;
		
		//virtual unsigned int createBuffer( const std::vector<void>& vertices, unsigned int bufferType ) = 0;
		virtual unsigned int createBuffer( void* start, int bufferSize, bufferType type ) = 0;
		virtual void drawIndex(unsigned int idVBO, unsigned int idIBO, int strideSize, unsigned int startVertex, unsigned int endVertex, int indexCount, int startIndex, int baseVertex) = 0;

		//virtual void draw() = 0;
	};
}
